/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package clases_test;

import clases.Nacionalidad;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.FlushModeType;
import javax.persistence.Persistence;
import javax.persistence.PersistenceException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author Miguel_
 */
public class testNacionalidad {
    
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("recetasUnit");
    EntityManager em;
    Nacionalidad na1;
    Nacionalidad na2;
    Nacionalidad na3;
    
    public testNacionalidad(){}
    
    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
        em = emf.createEntityManager();
        em.setFlushMode(FlushModeType.AUTO);
     
        na1 = createNacionalidad("Espania");
        na2 = createNacionalidad("Francia");
        na3 = createNacionalidad("Japon");
    }

    @After
    public void tearDown() {
        em.close();
    }
    
    private Nacionalidad createNacionalidad(String n){
        Nacionalidad na = new Nacionalidad();
        na.setNombre(n);
        return na;
    }
    
    
    @Test
    public void persistNacionalidad() {
        em.getTransaction().begin();
        
        // Insertamos los distintos objetos Tipo
        em.persist(na1);
        em.persist(na2);
        em.persist(na3);
        
        assertEquals("Tipo "+na1.getNombre()+" (ID "+na1.getId()+") insertado!.", na1.getId(),1);
        assertEquals("Tipo "+na2.getNombre()+" (ID "+na2.getId()+") insertado!.", na2.getId(),2);
        assertEquals("Tipo "+na3.getNombre()+" (ID "+na3.getId()+") insertado!.", na3.getId(),3);
        
        assertEquals("Receta "+na1.getNombre()+" (ID "+na1.getId()+") inserted!.",
                na1.getId(), 1);
        
        em.getTransaction().commit();
     
    } 
    
    @Test
    public void persistNacionalidad2() {
        try{
            em.getTransaction().begin();
            // Insertamos los distintos objetos Status
            em.persist(na1);
            em.persist(na2);
            em.persist(na3);
            
   //         assertEquals("Receta "+na1.getNombre()+" (ID "+na1.getId()+") inserted!.",
   //             na1.getId(), 1);
            
            em.getTransaction().commit();
      //      fail("Insertados Tipo duplicados.");
        }catch(Exception ex){
            assertEquals("No inserta status duplicados?", na1.getId()!=null,ex instanceof PersistenceException );
            assertEquals("No inserta status duplicados?", na2.getId()!=null,ex instanceof PersistenceException );
            assertEquals("No inserta status duplicados?", na3.getId()!=null,ex instanceof PersistenceException );
        }
    }
    
    
}
